值得高興的是IOTA白皮書已經有翻譯品質不錯的中文版本,否則碼農我可能就來不急研究了。
現在來看看tangle中的交易是如何運作的。
要發起一個交易,節點需做以下步驟:
1. 選擇兩個交易驗證(這兩筆交易可能會一樣)
2. 檢查這兩筆交易有無衝突,且有無驗證到衝突的交易
3. 要讓一筆交易合法 (valid),節點必須解出一道加密的問題(耗費計算力),與比特幣挖礦相似(如: 需要找出一個 nonce 讓其與其他驗證交易的資料的 hash 值為特定格式,像是這個 hash 值的前面需有幾個 0)
總之新的交易會去驗證之前的交易,那該如何挑選到最值得驗證的交易呢?直覺上會想到越新的交易越值得被驗證,這樣的驗證才會對整個網路比較有貢獻,不然就只會去幫助驗證到舊交易之前的部份,對後面沒有幫助,這樣的交易又叫做lazy tip(tip是指還沒有被驗證過得交易),是應該要被避免的。
為了選擇要驗證哪些交易以及了解tangle內交易的情況,引入了權重的概念,運作原理基本上如下,可以看到原本的上圖加上X(X權重為3)以後,前面所有被X指向或間接指向的node,權重都跟著加了3。
(圖源來自:https://iota.org/IOTA_Whitepaper.pdf)
在白皮書中是假設每個節點自身的權重都是1,在白皮書裡有提供一些策略和數學證明,來確保新的tip都盡量去驗證比較後面來的交易,然後盡量讓lazy tip沒人去驗證。
在之前的討論中我們知道在區塊鏈中一個完整的鏈裡面是不可能有重複花費一筆錢的情況,現在來考慮一下在tangle內會重複花費會如何呢?
解法還蠻簡單的,那新加入的tip要驗證的那兩筆交易都不去驗證其中的一個重複花費的交易就行了,tangle的選擇驗證機制會讓其中一筆交易最後沒有人去驗證,自然就死掉了。
不過我們考慮有人用一大堆交易去追上原本的tangle,讓原本的tangle中後面的一部分反而變成無效的交易呢?
攻擊的情況如下圖所示,攻擊者加入很多的節點試圖把原本的一些交易變成無效:
(圖源來自:https://iota.org/IOTA_Whitepaper.pdf)
論文中有複雜的數學證明說攻擊者的算力不夠大的時候幾乎不可能作到(有點類似比特幣論文中提到的51%攻擊情況),不過在IOTA發展的早期還不可能擁有比特幣那種規模的計算能力來避免攻擊,白皮書中是說這種時候就會需要其他的安全措施。
最後推薦可以在閱讀這篇筆記,來輔助理解tangle的運作模式。
Blockchain 研究資源和紀錄
https://hackmd.io/c/rkpoORY4W/https%3A%2F%2Fhackmd.io%2Fs%2FryriSgvAW
IOTA white paper
https://iota.org/IOTA_Whitepaper.pdf
Transactions, Confirmation And Consensus
https://hackmd.io/s/ryqBeI0ab